A computing system may have one or more processor nodes in which each node has a processing resource provided by one or more central processing units, microprocessors, cores of a microprocessor or a shared processing resource of a virtual machine (VM) which is an emulation of a particular computing system. The processor nodes of the computing system may share resources such as storage, for example. In one type of storage referred to as block storage, data is accepted in multiples such as a 512 byte multiple, for example. For a shared storage, each processor node may have one or more storage command submission queues to provide read commands, write commands and other storage commands from the processor nodes to the shared storage.
In some shared storage designs, the shared storage has a controller which receives the storage commands issued by each of the storage command submission queues of the various processor nodes and consolidates the storage commands in a common pending storage command queue to await execution by the shared storage. To distribute access to the shared storage amongst the processor nodes, the block storage controller may utilize an access distribution process such as a “round robin” distribution process, for example. In such an access distribution process, the block storage controller accepts a storage command from one command submission queue and places it in the common pending storage command queue in one turn, accepts a storage command from the next command submission queue and places it in the common pending storage command queue in the next turn, and so on. As a result of the shared storage access distribution process, the storage commands issued by a particular command submission queue of a particular processor node, may become intermingled with the storage commands issued by other storage command submission queues of the same or other processor nodes.
One example of block storage which is often shared by one or more processor nodes is a solid state drive (SSD). An SSD is a data storage device that uses integrated circuit assemblies as nonvolatile storage to store data persistently. SSDs typically have no moving mechanical components and this distinguishes SSDs from traditional electromechanical magnetic disks, such as, hard disk drives (HDDs) or floppy disks, which contain spinning disks and movable read/write heads. Compared to electromechanical disks, SSDs are typically more resistant to physical shock, run silently, have lower access time, and less latency. Many type of SSDs use NAND-based flash memory cells which retains data without power and is a type of non-volatile storage technology.
A block storage controller of the SSD may write write data in response to the write commands into one or more bands of storage in the shared storage. Within a band of storage, the SSD block storage controller frequently operates on entire blocks of storage at a time. For example, before writing to a memory cell within a block of memory cells in an SSD, the entire block of storage is usually erased at one time, typically by the application of a large voltage to the memory cells of the block of memory cells at a time. However, before erasing a block of data containing data to be preserved, the data which is to remain unchanged, is usually read out and saved. Once the erasure is completed, the new data and the saved data are both written to the newly erased block or in some cases to a previously erased block.
As a consequence, to write new data into an SSD, the quantity of data actually written to achieve the writing of the new data may in many cases exceed the quantity of new data. This phenomenon is sometimes referred to as “write amplification” and may adversely affect SSD performance.